/**
* Created with CLion.
* User:Lenovo
* Date:2023-06-03
* Time:1:51
* Description:
*/
#ifndef AWA_BINARYTREE_H
#define AWA_BINARYTREE_H

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
#include "Queue.h"

#define MAX(a, b) ((a) > (b) ? (a) : (b))

typedef int BTDataType;
typedef struct BinaryTreeNode
{
    BTDataType data;
    struct BinaryTreeNode *left;
    struct BinaryTreeNode *right;
} BTNode;

BTNode *BuyNode(BTDataType x);
BTNode *CreateBinaryTree();
void PrevOrder(BTNode *root);// 前序遍历
void InOrder(BTNode *root);// 中序遍历
void PostOrder(BTNode *root);// 后序遍历
void LevelOrder(BTNode *root);// 层序遍历
int BTreeSize(BTNode *root);// 二叉树结点个数
int BTreeLeafSize(BTNode *root);// 二叉树的叶子结点个数
int BTreeHeight(BTNode *root);// 二叉树的高度
int BTreeLevelKSize(BTNode *root, int k);// 第 K 层结点个数
BTNode *BTreeFind(BTNode *root, BTDataType x);// 二叉树查找值为 x 的结点
bool BTreeComplete(BTNode *root);// 检查二叉树是否为完全二叉树
void BTreeDestroy(BTNode *root);// 二叉树销毁

#endif //AWA_BINARYTREE_H
